<?php
namespace App\Common\Cla\Com\Upload\Config;

use App\Common as com;

class Sid extends com\Cla\ClaBase {

	protected $sid = null;
	
	/**
	 * @var \App\Common\Cla\Com\Upload\Config\Sid\BaseAbs
	 */
	protected $sidObj = null;
	
	public function __construct( $sid ){
		$this->sid = $sid;
		$this->sidObj = $this->newSidClass();
	}
	
	/**
	 * 获取sid类路径
	 * @return string 类路径
	 */
	protected function getSidClassPath(){
		if( $this->sid == '' ) return '';
		return __NAMESPACE__ . "\\Sid\\{$this->sid}";
	}
	
	/**
	 * 获取并实例化sid类
	 * @return null|object 实例化类，[null]实例化失败(类不存在)
	 * @return \App\Common\Cla\Com\Upload\Config\Sid\BaseAbs
	 */
	public function newSidClass(){
		$sid_class_path = $this->getSidClassPath();
		//
		if( empty( $sid_class_path ) ) return null;
		if( ! method_exists ( $sid_class_path, 'getConfigBefore' ) ) return null;
		return (new $sid_class_path);
	}
	
	/**
	 * 获取已经实例化的sid类
	 * @return null|object 实例化类，[null]实例化失败(类不存在)
	 * @return \App\Common\Cla\Com\Upload\Config\Sid\BaseAbs
	 */
	public function getSidClass(){
		return $this->sidObj();
	}
	
	/**
	 * 获取sid的配置（可以覆盖的配置）
	 * @return int 是否存在。[0]不存在 [1]存在
	 */
	public function isExist(){
		$sid_obj = $this->newSidClass();
		return ! is_null( $sid_obj ) ? 1 : 0;
	}
	
	/**
	 * 获取sid的配置（可以覆盖的配置）
	 * @return array 配置数组
	 */
	/*
	public function getConfigBefore(){
		if( is_null( $this->sidObj ) ) return [];
		// 获取配置
		$config = $this->sidObj->getConfigBefore();
		//
		return $config;
	}
	*/
	
	/**
	 * 获取sid的配置(不可覆盖的配置)
	 * @return array 配置数组
	 */
	/*
	public function getConfigLater(){
		if( is_null( $this->sidObj ) ) return [];
		// 获取配置
		$config = $this->sidObj->getConfigLater();
		//
		return $config;
	}
	*/
	
	/**
	 * 配置重写
	 * @param array $config 原配置
	 * @return array 新配置
	 */
	public function mergeConfig( array $config ){
		if( is_null( $this->sidObj ) ) return $config;
		//
		return $this->sidObj->mergeConfig( $config );
	}
	
	// ===============================
	//
	//
	// 下面为静态方法
	//
	//
	// ===============================
	

	
}
